
const NFs = require('fs');


class Database {
  // 读取索引列表
  indexList () {
    let path = __dirname + '/data/index/';
    return new Promise((resolve, reject) => {
      NFs.readdir(path, function (err, files) {
        if (err) {
          resolve();
          return console.log('文件夹读取失败：' + path);
        }
        resolve(
          files.map(item => {
            return path + item;
          })
        )
      })
    })
  }
  // 根据名称与条件读取索引详情
  indexDetail (filepath, sort, type) {
    return new Promise((resolve, reject) => {
      NFs.readFile(filepath, function (err, data) {
        if (err) {
          reject();
          return console.log(`文件读取失败：${filepath}`);
        }
        data = data.toString().split('\n');
        let arr = [];
        for (let i = 0; i < data.length; i++) {
          let aItem = data[i];
          // 用length<10来判断是否是最后一行，最后一行是空，
          if (aItem.length < 10) {
            continue;
          }
          let obj = JSON.parse(aItem);
          // 存在类型，并且当前项目不符合所有类型，跳到下一项
          if (type.length && obj.b) {
            let isAllIn = type.every(item => {return obj.b.indexOf(item) != -1});
            if (!isAllIn) {
              continue;
            }
          }
          
          let name = 'l';
          switch (sort) {
            case 'starCount': name = 's'; break;
            case 'viewCount': name = 'v'; break;
            case 'lastUpdateTime': name = 'l'; break;
          }
          let res = {
            cid: obj.c,
            s: obj[name]
          }
          arr.push(res);
        }
        resolve(arr);
      })
    })
  }
  // 根据id返回卡片项目
  getCardById (id) {
    let datapath = __dirname + '/data/data/' + id + '.txt';
    return new Promise((resolve, reject) => {
      NFs.readFile(datapath, function (err, data) {
        if (err) {
          reject();
          return console.log(`文件读取失败：${datapath}`);
        }
        data = data.toString().split('\n');
        data = JSON.parse(data);
        resolve(data);
      })
    })
  }
}

module.exports = Database;








